
package com.hlkj.pay.gateway.merchant;
/*
 * Hlpay-Plus aggregate payment system.
 * Copyright (c) 2024-2025 Hlpay Team Copyright has the right of final interpretation.
 */

import com.hlkj.framework.common.pojo.CommonResult;
import com.hlkj.pay.dto.merchant.VirtualBalanceDto;
import com.hlkj.pay.dto.merchant.report.MerchantReportDto;
import com.hlkj.pay.dto.merchant.report.MerchantReportResDto;
import com.hlkj.pay.dto.merchant.report.MerchantReportSmsCodeDto;
import com.hlkj.pay.dto.merchant.report.MerchantReportSmsSendDto;
import com.hlkj.pay.dto.payment.MerchantProofDto;
import com.hlkj.pay.infrastructure.model.merchant.MerchantReportAmountDO;
import com.hlkj.pay.infrastructure.model.merchant.MerchantReportInfoDO;

/**
 * @author HlpayTeam
 * @date 2024/12/20 14:59
 */
public interface IMerchantReportGateway {

    /**
     *
     * @param merchantReportDto
     */
    CommonResult<MerchantReportResDto> submitChannelReport(MerchantReportDto merchantReportDto);

    /**
     *
     * @param merchantReportInfoDO
     * @param merchantReportSmsSendDto
     * @return
     */
    CommonResult merchantReportSmsSend(MerchantReportInfoDO merchantReportInfoDO, MerchantReportSmsSendDto merchantReportSmsSendDto);
    /**
     *
     * @param merchantReportInfoDO
     * @param merchantReportSmsCodeDto
     * @return
     */
    CommonResult merchantReportSmsCode(MerchantReportInfoDO merchantReportInfoDO, MerchantReportSmsCodeDto merchantReportSmsCodeDto);

    /**
     *
     * @param merchantReportInfoDO
     * @return
     */
    CommonResult merchantReportQuery(MerchantReportInfoDO merchantReportInfoDO);
    CommonResult<MerchantReportResDto> merchantReportSign(MerchantReportInfoDO merchantReportInfoDO);
    /**
     *
     * @param merchantReportInfoDO
     * @return
     */
    CommonResult merchantReportSignQuery(MerchantReportInfoDO merchantReportInfoDO);

    /**
     *
     * @param channelCode
     * @return
     */
    boolean extensionExist(String channelCode);

    /**
     *
     * @param merchantReportInfoDO
     * @return
     */
    CommonResult<MerchantReportResDto> merchantReportAllot(MerchantReportInfoDO merchantReportInfoDO,MerchantReportAmountDO merchantReportAmountDO);

    /**
     *
     * @param merchantReportInfoDO
     * @param merchantReportAmountDO
     * @return
     */
    MerchantReportAmountDO merchantReportAllotQuery(MerchantReportInfoDO merchantReportInfoDO,MerchantReportAmountDO merchantReportAmountDO);

    /**
     *
     * @param merchantReportInfoDO
     * @param merchantReportAmountDO
     * @return
     */
    MerchantProofDto queryAllotProof(MerchantReportInfoDO merchantReportInfoDO, MerchantReportAmountDO merchantReportAmountDO);

    /**
     *
     * @param mchChannelCode
     * @return
     */
    CommonResult<VirtualBalanceDto> balanceQuery(String mchChannelCode);


    CommonResult<String> getSignUrl(MerchantReportInfoDO merchantReportInfoDO);

}
